package com.starry.FileUpload;

import org.apache.commons.io.IOUtils;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Base64;

public class DownloadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
         * 1.读取要下载的内容到输入流里
         * 2.返回到输出流中
         * 3.设置响应类型为图片类型
         * 4.设置响应头 告诉告诉浏览器 这个内容用于下载 而不是单纯显示
         * */
        String fileName = "b.jpg";
        /*
        * InputStream inputstream = servletContext.getResourceAsStream(filepath);
        * 这种方式下载不能使用绝对路径，需要用相对路径
        * 相对路径是从你web应用的路径再往下找；
        * 如果是绝对路径，比如C盘的某个路径下某个文件，那用户下载是去自己本地的C盘去找了，那当然找不到要下载的文件。
        * 如果用绝对路径，需要改成IO流操作。
        * */
        // String filepath = "e://fileDownload" + File.separator + fileName;
        String filepath = "/WEB-INF/img" + File.separator + fileName;
        ServletContext servletContext = getServletContext();
        InputStream inputstream = servletContext.getResourceAsStream(filepath); // 无法使用绝对路径
        response.setContentType(servletContext.getMimeType(filepath));
        OutputStream outstream = response.getOutputStream();
        IOUtils.copy(inputstream, outstream);
        // 设置响应头 告诉浏览器 这个内容用于下载 而不是单纯显示 如果是中文 需要url编码 否则名称显示有问题
        response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode("download.jpg","UTF-8"));
    }
}
